package com.bnz.service.impl;

import com.bnz.entity.Student;
import com.bnz.entity.vo.StudentVo;
import com.bnz.mapper.ClassesMapper;
import com.bnz.mapper.StudentMapper;
import com.bnz.service.StudentService;
import com.bnz.util.PageResult;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

// 注入spring容器
@Service
public class StudentServiceImpl implements StudentService {

    // 引入mapper
    @Autowired
    private StudentMapper studentMapper;
    @Autowired
    private ClassesMapper classesMapper;

    // 1、查询所有学生
    @Override
    public List<Student> findAll() {
        List<Student> list = studentMapper.selectAll();
        for (Student student : list) {
            student.setCname(classesMapper.selectByPrimaryKey(student.getCid()).getCname());
        }
        return list;
    }

    // 2、分页查询所有学生
    @Override
    public PageResult<Student> findByPage(int page, int pagesize) {
        // 2.1、开始进行分页
        PageHelper.startPage(page,pagesize);
        // 2.2、开始查询
        // 2.2.1、定义实例查询条件
        Example example = new Example(Student.class);
//        Example.Criteria criteria = example.createCriteria();
        // 2.2.2、封装查询条件
        List<Student> list = studentMapper.selectByExample(example);
        // 2.2.3、设置班级名字
        for (Student student : list) {
            // student.setCname设置名字；、
            // classesMapper.selectByPrimaryKey(student.getCid()):根据主键查询
            // .getCname():根据主键获取到名字
            student.setCname(classesMapper.selectByPrimaryKey(student.getCid()).getCname());
        }
        // 2.3、将封装的条件对象转换为PageInfo
        PageInfo<Student> pageInfo = new PageInfo<>(list);
        // 2.4、返回PageResult对象
        return new PageResult<>(pageInfo.getTotal(),pageInfo.getList());
    }

    // 3、条件查询带分页
    @Override
    public PageResult<Student> search(int page, int pagesize, StudentVo studentVo) {
        // 3.1、开始进行分页
        PageHelper.startPage(page,pagesize);
        // 3.2、定义查询条件
        Example example = new Example(Student.class);
        Example.Criteria criteria = example.createCriteria();
        // 3.3、封装查询条件
        if (!StringUtils.isEmpty(studentVo.getSname())){
         // 如果传入的学生名字不为空 "sname":属性名 实体类中，get后--》 public void getaname(属性名可自己更改)
            criteria.andLike("sname","%"+studentVo.getSname()+"%");
        }
        if (!StringUtils.isEmpty(studentVo.getAddr())){
            // 如果前端传入的地址不为空  "addr":属性名 实体类中，get后 (属性名可自己更改)
            criteria.andLike("addr","%"+studentVo.getAddr()+"%");
        }
        if (studentVo.getCid() != 0){
            // 如果前端传入的班级编号不为0  "cid":属性名 实体类中，get后 (属性名可自己更改)
            criteria.andEqualTo("cid",studentVo.getCid());
        }
        // 3.4、进行实例查询
        // User user = XxxMapper.selectByPrimaryKey(100); //相当于select * from user where id = 100
        List<Student> list = studentMapper.selectByExample(example);
        // 3.5、通过查询到的数据，设置班级名字
        for (Student student : list) {
            student.setCname(classesMapper.selectByPrimaryKey(student.getCid()).getCname());
        }
        // 3.6、将实例查询对象转换为PageInfo
        PageInfo<Student> pageInfo = new PageInfo<>(list);
        // 3.7、返回PageResult对象
        return new PageResult<>(pageInfo.getTotal(),pageInfo.getList());
    }

}
